package com.study.kt._04project.encrypt

import java.lang.StringBuilder
import java.security.MessageDigest

/**
 *  常用算法,不可逆
 *    1.md5：转16进制长度为32
 *    2.sha1：长度40
 *    3.sha256：长度
 *
 *   应用场景：
 *    1.用户密码md5
 *    2.校验下载的软件、文件等，防止被篡改
 *    3.数字签名
 */
fun main() {
    testMD5()
}

/**
 * md5的结果长度可能为16 也可能为32
 *  16：加密后没有转为16进制之前
 *  32：加密后转为16进制
 */
fun testMD5() {
    //可以传 md5 sha-1 sha-256
    val messageDigest = MessageDigest.getInstance("MD5")
    //默认为10进制数据
    val result = messageDigest.digest("slx".toByteArray())
    //转为16进制
    val sb = StringBuilder()
    result.forEach {
        // and 位与运算
        val hex = it.toInt() and (0xFF)

        //md5一般为32位，转换后的16进制可能有1位的 两位的，一般在一位的前面补0
        val hexString = Integer.toHexString(hex)
        if (hexString.length == 1) {
            sb.append("0").append(hexString)
        } else {
            sb.append(hexString)
        }
    }
    println("md5结果为：$sb")
}
